// 注：这个文件被用于管理项目中所有与“属性管理模块”有关的接口
import request from '@/utils/request'
// 再次强调：导入类型时必须结合使用关键字“type”和被导出的类型名称（例如下面的这一行代码），否则控制台中会报错说“该模块没有提供这个命名导出”，导致页面无法被正常渲染↓
import type { typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3,typeOfResponseDataWhenGettingAllOfAttributesAndTheirValuesForASpecificCategory3,typeOfObjectThatRepresentsAnAttribute } from "@/api/product/attr/type"
// 枚举在“属性管理”模块中将会被使用到的接口地址↓
enum API {
    // 获取一级分类时需要用到的接口地址↓
    Category1_URL = "/admin/product/getCategory1",
    // 获取二级分类时需要用到的接口地址↓
    Category2_URL = "/admin/product/getCategory2/",
    // 获取三级分类时需要用到的接口地址↓
    Category3_URL = "/admin/product/getCategory3/",
    // 在一级——三级分类被全部选中的情况下，获取某个具体的三级分类项下的所有属性及其属性值时需要用到的接口地址↓
    GetAttrAndValue_URL = "/admin/product/attrInfoList/",
    // 添加或修改属性时需要用到的接口地址↓
    AddOrUpdateAttr_URL = "/admin/product/saveAttrInfo",
    // 删除属性时需要用到的接口地址↓
    deleteAttr_URL = "/admin/product/deleteAttr/",
}
// 向获取一级分类的接口发送请求时需要用到的方法↓
export const requestCategory1 = () => request.get<any,any>(API.Category1_URL)
// 向获取二级分类的接口发送请求时需要用到的方法（注：在此处为参数标注类型时使用联合类型的原因是：一级分类的ID的初始值是“空字符串”）↓
// export const requestCategory2 = (category1Id:number) => request.get<any,any>(API.Category2_URL + category1Id)
export const requestCategory2 = (category1Id:number|string) => request.get<any,typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3>(API.Category2_URL + category1Id)
// 向获取三级分类的接口发送请求时需要用到的方法↓
// export const requestCategory3 = (category2Id:number) => request.get<any,any>(API.Category3_URL + category2Id)
export const requestCategory3 = (category2Id:number|string) => request.get<any,typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3>(API.Category3_URL + category2Id)
// 在一级——三级分类被全部选中的情况下，向获取某个具体的三级分类项下的所有属性及其属性值时需要用到的接口发送请求时需要用到的方法↓
// export const requestAttrAndItsValue = (category1Id:number|string,category2Id:number|string,category3Id:number) => request.get<any,any>(API.GetAttrAndValue_URL + `${category1Id}/${category2Id}/${category3Id}`)
export const requestAttrAndItsValue = (category1Id:number|string,category2Id:number|string,category3Id:number) => request.get<any,typeOfResponseDataWhenGettingAllOfAttributesAndTheirValuesForASpecificCategory3>(API.GetAttrAndValue_URL + `${category1Id}/${category2Id}/${category3Id}`)
// 向添加或修改属性时需要用到的接口发送请求时需要用到的方法↓
export const requestAddOrUpdateAttr = (attrInfo:typeOfObjectThatRepresentsAnAttribute) => request.post<any,any>(API.AddOrUpdateAttr_URL,attrInfo)
// 向删除属性时需要用到的接口发送请求时需要用到的方法↓
export const requestDeleteAttr = (attrId:number) => request.delete<any,any>(API.deleteAttr_URL + attrId)